/*
  一、简答题
    1、构建流程主要包含四部分：构建入口文件、打包文件出口、文件编译loader、构建插件。
      a、webpack构建会先根据配置对象的entry属性(可以是单文件、也可以是多文件)开始，找出所有依赖模块(文件)
      b、对找出的模块使用配置好的loader进行编译、转换。一个模块可以使用多个loader进行转换
      c、对构建好的模块整合输出到配置中指定的出口目录，多入口文件会对应输出多个打包文件，考虑到浏览器缓存，还可以给在每次打包文件名字上附带上本次打包的相关hash值以说明文件是否有更新，
         还可以设置打包模块拆分，公共模块提取，按需加载模块打包等操作
      d、在构建的过程中会触发各种勾子，插件既是提前注册相应勾子回调，在对应阶段做构建相关的扩展，比如拷贝文件、tree shaking、压缩文件等操作

    2、a、发挥作用时机不一样：loader，模块编译阶段。plugin，整个构建阶段都可能
       b、功能对象不一样：loader，对指定模块进行编译，针对的是某个模块类型。plugin，构建整个生命周期都可能存在，针对的是所有模块

       开发loader思路：loader返回一个方法，该方法有一个入参和一个返回值，入参可能是模块文件内容，也可能是上一个loader的返回值，返回值是经过处理后的一段字符串代码或者交给下一个loader处理的内容
       开发plugin思路：plugin是一个包含apply方法的对象，apply方法有一个入参 compiler，这个对象上有整个构建相关的配置信息。compiler对象有个hooks对象，可以注册各种勾子回调，
                      并且回调函数带有一个参数 compilation，这个参数是这次构建带有的相关信息。

  二、项目地址：https://gitee.com/zn3102090109/zn-webpack.git
      项目说明：./webpack打包.md
*/